package com.groupfour.attendancemanagementsystem.dao;

import com.groupfour.attendancemanagementsystem.entity.DO.LeaveDO;
import com.groupfour.attendancemanagementsystem.entity.DO.LeaveOperateDO;
import com.groupfour.attendancemanagementsystem.entity.DTO.LeaveDTO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

@Mapper
public interface LeaveDao {

    /**
     * 查询所有请假记录
     * @return
     */
    List<LeaveDO> selectAllLeave();

    /**
     * 通过提交时间、审批状态、原因、主题查询请假记录
     * @param leave 传入输入值的map对象
     * @return 返回请假记录表
     */
    List<LeaveDO> selectLeaveByStudent(LeaveDO leave);

    /**
     * 新增请假记录（学生:附件在controller写文件上传留下url）
     * @param leave
     * @return
     */
    int insertLeave(LeaveDO leave);

    /**
     * 通过id查看假条详情（学生：详情、不通过原因）
     * @param id 传入选择的请假记录id
     * @return 返回指定的请假记录
     */
    LeaveDO selectLeaveById(Integer id);

    /**
     * 通过id查看学生假条的详情然后修改
     * @param leave 传入学生可以修改的部分
     * @return 返回结果
     */
    int updateLeaveByStudent(LeaveDO leave);

    /**
     * 通过提交日期、院系、专业、年级、班级、学号、姓名、主题、请假原因、审批状态查询请假记录
     * @param leaveDTO 输入参数的通用类
     * @return 返回通用类列表
     */
    List<LeaveDTO> selectLeaveByTeacher(LeaveDTO leaveDTO);

    /**
     *教师通过请假记录id处理请假记录
     * @param leave 输入修改的请假记录类
     * @return 返回int
     */
    int updateLeaveByTeacher(LeaveDO leave);

    /**
     *管理员查看所有请假记录
     * @return
     */
    List<LeaveDTO> selectLeaveByManage();

    /**
     * 管理员查看所有操作记录
     * @return 返回所有请假记录列表
     */
    List<LeaveOperateDO> selectHandleByManage();

}
